CSS @font-feature-values์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ผ๋ก OpenType ๊ธ๊ผด ๊ธฐ๋ฅ์ ์ ๋ฐํ๊ฒ ์ ์ดํ๊ณ , ์ ์ธ๊ณ ์น ๋์์ธ ๋ฐ ์ ๊ทผ์ฑ์ ์ํ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ํฅ์์ํค๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
ํ์ดํฌ๊ทธ๋ํผ ์ ์ฌ๋ ฅ ๊ทน๋ํ: CSS @font-feature-values ์ข ํฉ ๊ฐ์ด๋
์น ๋์์ธ ์์ญ์์ ํ์ดํฌ๊ทธ๋ํผ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ํ์ฑํ๊ณ ๋ธ๋๋ ์์ด๋ดํฐํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ค์ถ์ ์ธ ์ญํ ์ ํฉ๋๋ค. font-family, font-size, font-weight์ ๊ฐ์ ๊ธฐ๋ณธ CSS ๊ธ๊ผด ์์ฑ์ ๊ธฐ๋ณธ์ ์ธ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง, @font-feature-values ๊ท์น์ ๊ณ ๊ธ ํ์ดํฌ๊ทธ๋ํผ ์ฌ์ฉ์ ์ ์์ ์ธ๊ณ๋ก ๊ฐ๋ ๊ด๋ฌธ์ ์ด์ด์ค๋๋ค. ์ด ๊ท์น์ OpenType ๊ธ๊ผด์ ์จ๊ฒจ์ง ์ ์ฌ๋ ฅ์ ๋ฐํํ์ฌ ๊ฐ๋ฐ์์ ๋์์ด๋๊ฐ ๋ฏธ์ ๊ฐ๊ฐ, ๊ฐ๋
์ฑ ๋ฐ ์ ๊ทผ์ฑ ํฅ์์ ์ํด ํน์ ๊ธ๊ผด ๊ธฐ๋ฅ์ ๋ฏธ์ธ ์กฐ์ ํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๊ฐ์ด๋์์๋ @font-feature-values์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ๊ทธ ๊ตฌ๋ฌธ, ์ฌ์ฉ๋ฒ ๋ฐ ๋ค์ํ ๊ธ๋ก๋ฒ ์ปจํ
์คํธ์ ๊ฑธ์น ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ํ๊ตฌํฉ๋๋ค.
OpenType ๊ธฐ๋ฅ ์ดํดํ๊ธฐ
@font-feature-values์ ์ธ๋ถ ์ฌํญ์ ์ดํด๋ณด๊ธฐ ์ ์ OpenType ๊ธฐ๋ฅ์ ๊ธฐ๋ณธ ๊ฐ๋
์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. OpenType์ ์ด์ ๋ฒ์ ์ธ TrueType ๋ฐ PostScript์ ๊ธฐ๋ฅ์ ํ์ฅํ ๋๋ฆฌ ์ฑํ๋ ๊ธ๊ผด ํ์์
๋๋ค. ์ด๋ ๊ธ๋ฆฌํ ๋ ๋๋ง์ ๋ค์ํ ์ธก๋ฉด์ ์ ์ดํ๋ ํ๋ถํ ๊ธฐ๋ฅ ์ธํธ๋ฅผ ํฌํจํ๋ฉฐ, ๋ค์์ ํฌํจํฉ๋๋ค:
- ํฉ์(Ligatures): ๋ฏธ๊ด๊ณผ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋ ๊ฐ ์ด์์ ๋ฌธ์๋ฅผ ๋จ์ผ ๊ธ๋ฆฌํ๋ก ๊ฒฐํฉํฉ๋๋ค(์: 'fi', 'fl').
- ๋์ฒด ๊ธ๋ฆฌํ(Alternate Glyphs): ํน์ ๋ฌธ์์ ๋ณํ์ ์ ๊ณตํ์ฌ ๋ฌธ์ฒด์ ์ ํ์ด๋ ๋ฌธ๋งฅ์ ์กฐ์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ์คํ์ผ ์ธํธ(Stylistic Sets): ๊ด๋ จ๋ ์คํ์ผ ๋ณํ์ ๋จ์ผ ์ด๋ฆ ์๋์ ๊ทธ๋ฃนํํ์ฌ ๋์์ด๋๊ฐ ์ผ๊ด๋ ๋ฏธ์ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ซ์ ์คํ์ผ(Number Styles): ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ ๋ผ์ด๋ ์ซ์, ์ฌ๋์คํ์ผ ์ซ์, ํ ์ซ์ ๋ฑ ๋ค์ํ ์ซ์ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค.
- ๋ถ์(Fractions): ์ ์ ํ ๋ถ์, ๋ถ๋ชจ, ๋ถ์ ๋ง๋ ๊ธ๋ฆฌํ๋ก ๋ถ์ ํ์์ ์๋์ผ๋ก ์ง์ ํฉ๋๋ค.
- ์๋ฌธ์ ํฌ๊ธฐ ๋๋ฌธ์(Small Capitals): ์๋ฌธ์๋ฅผ ๋๋ฌธ์์ ์์ ๋ฒ์ ์ผ๋ก ํ์ํฉ๋๋ค.
- ๋ฌธ๋งฅ ๋์ฒด(Contextual Alternates): ์ฃผ๋ณ ๋ฌธ์์ ๋ฐ๋ผ ๊ธ๋ฆฌํ ๋ชจ์์ ์กฐ์ ํ์ฌ ๊ฐ๋ ์ฑ๊ณผ ์๊ฐ์ ์กฐํ๋ฅผ ํฅ์์ํต๋๋ค.
- ์ค์์(Swashes): ํน์ ๊ธ๋ฆฌํ์ ์ถ๊ฐ๋๋ ์ฅ์์ ์ธ ํ์ฅ์ผ๋ก, ์ฐ์ํจ๊ณผ ๋ฉ์ ๋ํฉ๋๋ค.
- ์ปค๋(Kerning): ์๊ฐ์ ๊ท ํ์ ๊ฐ์ ํ๊ธฐ ์ํด ํน์ ๋ฌธ์ ์ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์กฐ์ ํฉ๋๋ค.
์ด๋ฌํ ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก ๊ธ๊ผด ํ์ผ ์์ฒด ๋ด์ ์ ์๋ฉ๋๋ค. @font-feature-values๋ CSS์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ง์ ์ ๊ทผํ๊ณ ์ ์ดํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ํ์ดํฌ๊ทธ๋ํผ ๋์์ธ์ ๋นํ ๋ฐ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
CSS @font-feature-values ์๊ฐ
@font-feature-values at-rule์ ์ฌ์ฉํ๋ฉด ํน์ OpenType ๊ธฐ๋ฅ ์ค์ ์ ๋ํ ์ค๋ช
์ ์ธ ์ด๋ฆ์ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด CSS์์ ์ฌ๋์ด ๋ ์ฝ๊ฒ ์ฝ์ ์ ์๋ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ด ์ฝ๋์ ์ ์ง ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ๊ณ ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ค. ๊ธฐ๋ณธ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
@font-feature-values <font-family-name> {
<feature-tag-value> {
<feature-name>: <feature-value>
}
}
๊ฐ ๊ตฌ์ฑ ์์๋ฅผ ๋ถ์ํด ๋ณด๊ฒ ์ต๋๋ค:
@font-feature-values: ๊ธฐ๋ฅ ๊ฐ์ ์ ์๋ฅผ ์์ํ๋ at-rule์ ๋๋ค.<font-family-name>: ์ด ๊ธฐ๋ฅ ๊ฐ์ด ์ ์ฉ๋ ๊ธ๊ผด ํจ๋ฐ๋ฆฌ์ ์ด๋ฆ์ ๋๋ค(์: 'MyCustomFont', 'Arial'). ์ด๋ ์ ์๋ ๊ธฐ๋ฅ ๊ฐ์ด ์ง์ ๋ ๊ธ๊ผด์ ์ฌ์ฉํ๋ ์์์๋ง ์ ์ฉ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.<feature-tag-value>: ํน์ OpenType ๊ธฐ๋ฅ ํ๊ทธ์ ๋ํ ๊ฐ์ ์ ์ํ๋ ๋ธ๋ก์ ๋๋ค.<feature-tag>: OpenType ๊ธฐ๋ฅ์ ์๋ณํ๋ ๋ค ๊ธ์ ํ๊ทธ์ ๋๋ค(์: ํฉ์๋ฅผ ์ํliga, ์๋ฌธ์ ํฌ๊ธฐ ๋๋ฌธ์๋ฅผ ์ํsmcp, ๋ฌธ๋งฅ์ ์ค์์๋ฅผ ์ํcswh). ์ด ํ๊ทธ๋ค์ ํ์คํ๋์ด ์์ผ๋ฉฐ OpenType ์ฌ์์ ์ํด ์ ์๋ฉ๋๋ค. OpenType ๋ฌธ์ ๋ฐ ๋ค์ํ ์จ๋ผ์ธ ์๋ฃ์์ ์ด๋ฌํ ํ๊ทธ์ ์ ์ฒด ๋ชฉ๋ก์ ์ฐพ์ ์ ์์ต๋๋ค.<feature-name>: OpenType ๊ธฐ๋ฅ์ ํน์ ๊ฐ์ ํ ๋นํ๋ ์ค๋ช ์ ์ธ ์ด๋ฆ์ ๋๋ค. ์ด๊ฒ์ด CSS ๊ท์น์์ ์ฌ์ฉํ ์ด๋ฆ์ ๋๋ค. ์๋ฏธ ์๊ณ ๊ธฐ์ตํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ ํํ์ธ์.<feature-value>: OpenType ๊ธฐ๋ฅ์ ์ค์ ๊ฐ์ ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ฆฌ์ธ(boolean) ๊ธฐ๋ฅ์ ๊ฒฝ์ฐon๋๋off์ด๊ฑฐ๋, ๊ฐ์ ๋ฒ์๋ฅผ ํ์ฉํ๋ ๊ธฐ๋ฅ์ ๊ฒฝ์ฐ ์ซ์ ๊ฐ์ ๋๋ค.
์ค์ฉ์ ์ธ ์์ ๋ฐ ์ฌ์ฉ ์ฌ๋ก
@font-feature-values์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ์ค๋ช
ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. ์์ ํฉ์ ํ์ฑํํ๊ธฐ
์์ ํฉ์(Discretionary ligatures)๋ ํน์ ๋ฌธ์ ์กฐํฉ์ ๋ฏธ์ ๋งค๋ ฅ์ ํฅ์์ํฌ ์ ์๋ ์ ํ์ ํฉ์์ ๋๋ค. ์ด๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ฅ ๊ฐ์ ์ ์ํ ์ ์์ต๋๋ค:
@font-feature-values "MyCustomFont" {
@discretionary-ligatures {
common-ligatures: on;
}
}
.my-text {
font-family: "MyCustomFont";
font-variant-alternates: discretionary-ligatures;
}
์ด ์์ ์์๋ dlig(์์ ํฉ์) OpenType ๊ธฐ๋ฅ์ ๋ํด common-ligatures๋ผ๋ ์ด๋ฆ์ ๊ธฐ๋ฅ ๊ฐ์ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ font-variant-alternates ์์ฑ์ ์ฌ์ฉํ์ฌ ์ด ๊ธฐ๋ฅ ๊ฐ์ .my-text ํด๋์ค์ ์ ์ฉํฉ๋๋ค. ์ฐธ๊ณ : ์ด์ ๋ฒ์ ์ ๋ธ๋ผ์ฐ์ ์์๋ font-variant-ligatures ์์ฑ์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค. ๋ฐฐํฌ ์ ์ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ํ์ธํด์ผ ํฉ๋๋ค.
2. ์คํ์ผ ์ธํธ ์ ์ดํ๊ธฐ
์คํ์ผ ์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ์ ์คํ์ผ ๋ณํ ๋ชจ์์ ์ ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ ๋ชฉ์ด๋ ๋ณธ๋ฌธ ํ ์คํธ์ ํน์ ์คํ์ผ ์ธํธ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
@font-feature-values "MySerifFont" {
@stylistic-sets {
alternate-a: ss01;
elegant-numbers: ss02;
}
}
.heading {
font-family: "MySerifFont";
font-variant-alternates: stylistic(alternate-a);
}
.body-text {
font-family: "MySerifFont";
font-variant-alternates: stylistic(elegant-numbers);
}
์ฌ๊ธฐ์๋ alternate-a(ss01์ ๋งคํ๋จ)์ elegant-numbers(ss02์ ๋งคํ๋จ)๋ผ๋ ๋ ๊ฐ์ ์คํ์ผ ์ธํธ๋ฅผ ์ ์ํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ font-variant-alternates๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์์์ ์ด ์ธํธ๋ค์ ์ ์ฉํฉ๋๋ค. ํน์ ์คํ์ผ ์ธํธ ํ๊ทธ(ss01, ss02 ๋ฑ)๋ ๊ธ๊ผด ์์ฒด์ ์ ์๋์ด ์์ต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ ์คํ์ผ ์ธํธ๋ ํด๋น ๊ธ๊ผด์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
3. ์ซ์ ์คํ์ผ ์ฌ์ฉ์ ์ ์ํ๊ธฐ
OpenType ๊ธ๊ผด์ ์ข ์ข ๋ค์ํ ๋ชฉ์ ์ ์ํด ๋ค๋ฅธ ์ซ์ ์คํ์ผ์ ์ ๊ณตํฉ๋๋ค. ๋ผ์ด๋ ์ซ์๋ ์ผ๋ฐ์ ์ผ๋ก ํ์ ์ฐจํธ์ ์ฌ์ฉ๋๋ ๋ฐ๋ฉด, ์ฌ๋์คํ์ผ ์ซ์๋ ๋ณธ๋ฌธ ํ ์คํธ์ ๋ ์์ฐ์ค๋ฝ๊ฒ ์ด์ฐ๋ฌ์ง๋๋ค.
@font-feature-values "MyProFont" {
@styleset {
tabular-numbers: tnum;
proportional-oldstyle: pold;
}
}
.table-data {
font-family: "MyProFont";
font-variant-alternates: styleset(tabular-numbers);
}
.body-text {
font-family: "MyProFont";
font-variant-alternates: styleset(proportional-oldstyle);
}
์ด ์์ ๋ ํ ๋ฐ์ดํฐ๋ฅผ ์ํ tabular-numbers(tnum)์ ๋ณธ๋ฌธ ํ
์คํธ๋ฅผ ์ํ proportional-oldstyle(pold)์ ์ ์ํ์ฌ ๊ฐ๋
์ฑ๊ณผ ์๊ฐ์ ์ผ๊ด์ฑ์ ํฅ์์ํต๋๋ค.
4. ์ฌ๋ฌ ๊ธฐ๋ฅ ๊ฒฐํฉํ๊ธฐ
๋จ์ผ font-variant-alternates ์ ์ธ ๋ด์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ์ ์์ต๋๋ค:
@font-feature-values "MyComplexFont" {
@styleset {
historical-forms: hist;
contextual-alternates: calt;
}
@discretionary-ligatures {
rare-ligatures: dlig;
}
}
.special-text {
font-family: "MyComplexFont";
font-variant-alternates: styleset(historical-forms) discretionary-ligatures(rare-ligatures);
}
์ด๋ฅผ ํตํด ์ฌ๋ฌ OpenType ๊ธฐ๋ฅ์ ๋์์ ์ ์ฉํ์ฌ ๋ณต์กํ ํ์ดํฌ๊ทธ๋ํผ ํจ๊ณผ๋ฅผ ๋ผ ์ ์์ต๋๋ค. ์์๊ฐ ์ค์ํ ๋๋ ์์ผ๋ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด์๋ ์คํ์ด ํต์ฌ์ ๋๋ค.
์ง์ ์ ์ธ ๊ธฐ๋ฅ ์ ๊ทผ์ ์ํ font-variant-settings ์ฌ์ฉ
@font-feature-values์ font-variant-alternates๊ฐ ๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด, font-variant-settings ์์ฑ์ ๋ค ๊ธ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ OpenType ๊ธฐ๋ฅ์ ์ง์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค. ์ด ์์ฑ์ ๋ฏธ๋ฆฌ ์ ์๋ font-variant-alternates ํค์๋์ ํฌํจ๋์ง ์๋ ๊ธฐ๋ฅ์ ๋ค๋ฃจ๊ฑฐ๋ ๋ ์ธ๋ถํ๋ ์ ์ด๊ฐ ํ์ํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
font-variant-settings์ ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
font-variant-settings: "<feature-tag>" <value>, "<feature-tag>" <value>, ...;
์๋ฅผ ๋ค์ด, ์๋ฌธ์ ํฌ๊ธฐ ๋๋ฌธ์๋ฅผ ํ์ฑํํ๋ ค๋ฉด ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
.small-caps-text {
font-family: "MyFont";
font-variant-settings: "smcp" 1;
}
์ฌ๊ธฐ์ "smcp" 1์ ๋ธ๋ผ์ฐ์ ์ ์๋ฌธ์ ํฌ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ฅ์ ํ์ฑํํ๋๋ก ์ง์ ์ง์ํฉ๋๋ค. ๊ฐ 1์ ์ผ๋ฐ์ ์ผ๋ก '์ผ์ง'์, 0์ '๊บผ์ง'์ ๋ํ๋
๋๋ค.
ํ๋์ ์ ์ธ์ ์ฌ๋ฌ ๊ธฐ๋ฅ ์ค์ ์ ๊ฒฐํฉํ ์ ์์ต๋๋ค:
.advanced-text {
font-family: "MyFont";
font-variant-settings: "liga" 0, "cswh" 1, "calt" 1;
}
์ด๋ ํ์ค ํฉ์(liga)๋ฅผ ๋นํ์ฑํํ๊ณ , ๋ฌธ๋งฅ์ ์ค์์(cswh)๋ฅผ ํ์ฑํํ๋ฉฐ, ๋ฌธ๋งฅ ๋์ฒด(calt)๋ฅผ ํ์ฑํํฉ๋๋ค.
font-variant-settings์ ์ฅ์ :
- ์ง์ ์ ์ด: ๊ฐ๋ณ OpenType ๊ธฐ๋ฅ์ ๋ํ ์ ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ ์ฐ์ฑ:
font-variant-alternates์์ ๋ค๋ฃจ์ง ์๋ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
font-variant-settings์ ๋จ์ :
- ๋ฎ์ ๊ฐ๋ ์ฑ: ์์ ๊ธฐ๋ฅ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ๊ธฐ๊ฐ ๋ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
- ๋ฎ์ ์ ์ง๋ณด์์ฑ: ๊ธ๊ผด ๋ด ๊ธฐ๋ฅ ํ๊ทธ๊ฐ ๋ณ๊ฒฝ๋๋ฉด CSS๋ฅผ ์ง์ ์ ๋ฐ์ดํธํด์ผ ํฉ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก: ๋ ๋์ ๊ฐ๋
์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ์ํด ๊ฐ๋ฅํ๋ฉด @font-feature-values์ font-variant-alternates๋ฅผ ์ฌ์ฉํ์ธ์. font-variant-settings๋ ์ง์ ์ ์ธ ๊ธฐ๋ฅ ์ ๊ทผ์ด ํ์ํ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํ์ธ์.
์ ๊ทผ์ฑ ๊ณ ๋ ค์ฌํญ
@font-feature-values๋ ํ์ดํฌ๊ทธ๋ํผ์ ์๊ฐ์ ๋งค๋ ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ง๋ง, ์ ๊ทผ์ฑ์ ๋ฏธ์น๋ ์ํฅ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ชป ์ ์ฉ๋ ๊ธฐ๋ฅ์ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์ ๊ฐ๋
์ฑ๊ณผ ์ฌ์ฉ์ฑ์ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ์ฃผ์ ๊ณ ๋ ค์ฌํญ์
๋๋ค:
- ํฉ์(Ligatures): ํฉ์๋ ๋ฏธ๊ด์ ๊ฐ์ ํ ์ ์์ง๋ง, ๋๋ ์ฆ์ด ์๊ฑฐ๋ ์คํฌ๋ฆฐ ๋ฆฌ๋์ ์์กดํ๋ ์ฌ์ฉ์์ ๊ฐ๋ ์ฑ์ ๋ฐฉํดํ ์๋ ์์ต๋๋ค. ํนํ ๋ณธ๋ฌธ ํ ์คํธ์์ ์์ ํฉ์๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ์ง ๋ง์ธ์. ํ์ํ ๊ฒฝ์ฐ ํฉ์๋ฅผ ๋นํ์ฑํํ ์ ์๋ ์ต์ ์ ์ ๊ณตํ์ธ์.
- ๋์ฒด ๊ธ๋ฆฌํ(Alternate Glyphs): ์ง๋์น๊ฒ ์ฅ์์ ์ด๊ฑฐ๋ ๋น์ ํต์ ์ธ ๊ธ๋ฆฌํ๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์คํธ๋ฅผ ํด๋ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋์ฒด ๊ธ๋ฆฌํ๊ฐ ์ถฉ๋ถํ ๋๋น์ ๊ฐ๋ ์ฑ์ ์ ์งํ๋๋ก ํ์ธ์.
- ๋ฌธ๋งฅ ๋์ฒด(Contextual Alternates): ๋ฌธ๋งฅ ๋์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ ์ฑ์ ํฅ์์ํค์ง๋ง, ์๋ชป ๋์์ธ๋ ๋์ฒด๋ ์๊ฐ์ ๋ถ์ผ์น์ ํผ๋์ ์ผ๊ธฐํ ์ ์์ต๋๋ค. ๋ค์ํ ๋ฌธ์ ์กฐํฉ์ผ๋ก ๋ฌธ๋งฅ ๋์ฒด๋ฅผ ์ฒ ์ ํ ํ ์คํธํ์ธ์.
- ๋๋น(Contrast): ์ฌ์ฉ๋ OpenType ๊ธฐ๋ฅ์ ๊ด๊ณ์์ด ํ ์คํธ์ ๋ฐฐ๊ฒฝ ๊ฐ์ ์ถฉ๋ถํ ๋๋น๋ฅผ ๋ณด์ฅํ์ธ์. ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋น ๋น์จ์ ํ์ธํ๊ณ WCAG ์ ๊ทผ์ฑ ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ์ธ์.
- ํ ์คํธ(Testing): ์คํฌ๋ฆฐ ๋ฆฌ๋์ ๊ฐ์ ๋ณด์กฐ ๊ธฐ์ ๋ก ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ํ ์คํธํ์ฌ ํ ์คํธ๊ฐ ์ฅ์ ๊ฐ ์๋ ์ฌ์ฉ์์๊ฒ ์ฌ๋ฐ๋ฅด๊ฒ ํด์๋๊ณ ์ ๋ฌ๋๋์ง ํ์ธํ์ธ์.
๊ตญ์ ํ ๋ฐ ํ์งํ
OpenType ๊ธฐ๋ฅ์ ๋ค์ํ ์ธ์ด์ ์ฐ๊ธฐ ์ฒด๊ณ๋ฅผ ์ง์ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ง์ ๊ธ๊ผด์๋ ํน์ ์ธ์ด ๋๋ ์ง์ญ์ ์ํด ํน๋ณํ ์ค๊ณ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์๋ฅผ ๋ค์ด:
- ์๋์ด: ์๋์ด์ฉ OpenType ๊ธ๊ผด์๋ ๋จ์ด ๋ด ์์น์ ๋ฐ๋ผ ๊ธ๋ฆฌํ๋ฅผ ์กฐ์ ํ๋ ๋ฌธ๋งฅ์ ํํ ํ์ฑ ๊ธฐ๋ฅ์ด ์ข ์ข ํฌํจ๋ฉ๋๋ค.
- ์ธ๋๊ณ ์คํฌ๋ฆฝํธ: ์ธ๋๊ณ ์คํฌ๋ฆฝํธ(์: ๋ฐ๋ฐ๋๊ฐ๋ฆฌ, ๋ฒต๊ณจ์ด, ํ๋ฐ์ด)์ฉ ๊ธ๊ผด์ ๊ฒฐํฉ ์์๊ณผ ๋ชจ์ ๋ถํธ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ณต์กํ ํํ ํ์ฑ ๊ท์น์ ํตํฉํฉ๋๋ค.
- CJK (์ค๊ตญ์ด, ์ผ๋ณธ์ด, ํ๊ตญ์ด): CJK ์ธ์ด์ฉ OpenType ๊ธ๊ผด์๋ ์ง์ญ์ ์ ํธ๋์ ๋ฐ๋ฅธ ๋์ฒด ๊ธ๋ฆฌํ ํํ ๋ฐ ์คํ์ผ ๋ณํ ๊ธฐ๋ฅ์ด ์ข ์ข ํฌํจ๋ฉ๋๋ค.
๋ค๊ตญ์ด ์น์ฌ์ดํธ๋ฅผ ๋์์ธํ ๋๋ ๋์ ์ธ์ด๋ฅผ ์ ์ ํ ์ง์ํ๋ ๊ธ๊ผด์ ์ ํํ๊ณ OpenType ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ ๋๋ง๊ณผ ์ ์ ํ ์คํ์ผ ๋ณํ์ ๋ณด์ฅํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํ์ดํฌ๊ทธ๋ํผ๊ฐ ๋ฌธํ์ ์ผ๋ก ๋ฏผ๊ฐํ๊ณ ์ธ์ด์ ์ผ๋ก ์ ํํ์ง ํ์ธํ๊ธฐ ์ํด ์์ด๋ฏผ ๋ฐ ํ์ดํฌ๊ทธ๋ํผ ์ ๋ฌธ๊ฐ์ ์๋ดํ์ธ์.
๋ค์์ ๋ค๋ฅธ ์ธ์ด์์ OpenType ๊ธฐ๋ฅ์ ์ค์์ฑ์ ๋ณด์ฌ์ฃผ๋ ๋ช ๊ฐ์ง ์์ ๋๋ค:
- ์๋์ด: ๋ง์ ์๋์ด ๊ธ๊ผด์ ๋จ์ด ๋ด ์์น์ ๋ฐ๋ผ ๋ฌธ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐํ๊ธฐ ์ํด ๋ฌธ๋งฅ ๋์ฒด(
calt)์ ํฌ๊ฒ ์์กดํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ฉด ํ ์คํธ๊ฐ ๋์ด์ง๊ณ ์ฝ์ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค. - ํ๋์ด (๋ฐ๋ฐ๋๊ฐ๋ฆฌ): ํ์ ํฉ์(
rlig) ๊ธฐ๋ฅ์ ๊ฒฐํฉ ์์์ ์ฌ๋ฐ๋ฅด๊ฒ ๋ ๋๋งํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ๋ณต์กํ ์์ ๊ตฐ์ง์ด ๊ฐ๋ณ ๋ฌธ์๋ก ํ์๋์ด ํ ์คํธ๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค. - ์ผ๋ณธ์ด: ์ผ๋ณธ์ด ํ์ดํฌ๊ทธ๋ํผ๋ ์คํ์ผ ๋ณํ์ ์ ๊ณตํ๊ณ ๋ค์ํ ๋ฏธ์ ์ ํธ๋๋ฅผ ์ถฉ์กฑ์ํค๊ธฐ ์ํด ๋ฌธ์์ ๋ํ ๋์ฒด ๊ธ๋ฆฌํ๋ฅผ ์์ฃผ ํ์ฉํฉ๋๋ค.
font-variant-alternates๋๋font-variant-settings๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฌํ ๋์ฒด ๊ธ๋ฆฌํ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
์ง์ํ๋ ๊ฐ ์ธ์ด์ ํน์ ํ์ดํฌ๊ทธ๋ํผ ์๊ตฌ ์ฌํญ์ ์กฐ์ฌํ๊ณ ๊ทธ์ ๋ฐ๋ผ ๊ธ๊ผด๊ณผ ๊ธฐ๋ฅ์ ์ ํํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์์ด๋ฏผ๊ณผ ํจ๊ป ํ ์คํธํ๋ ๊ฒ์ ์ ํํ๊ณ ๋ฌธํ์ ์ผ๋ก ์ ์ ํ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ํธํ์ฑ
@font-feature-values ๋ฐ ๊ด๋ จ CSS ์์ฑ์ ๋ํ ๋ธ๋ผ์ฐ์ ์ง์์ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ํฌ๊ฒ ํฅ์๋์์ง๋ง, ํ๋ก๋์
ํ๊ฒฝ์์ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์์กดํ๊ธฐ ์ ์ ํธํ์ฑ์ ํ์ธํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. 2023๋
ํ๋ฐ ๊ธฐ์ค์ผ๋ก ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ ๋ ๋ค์์ ํฌํจํ์ฌ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ง์ํฉ๋๋ค:
- Chrome
- Firefox
- Safari
- Edge
- Opera
๊ทธ๋ฌ๋ ์ด์ ๋ธ๋ผ์ฐ์ ๋ ์ง์์ด ๋ถ์กฑํ๊ฑฐ๋ ์ผ๊ด๋์ง ์์ ๋์์ ๋ณด์ผ ์ ์์ต๋๋ค. "Can I use..."์ ๊ฐ์ ์น์ฌ์ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฌ ํธํ์ฑ ์ํ๋ฅผ ํ์ธํ๊ณ ์ด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด ์คํ์ผ์ ์ ๊ณตํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ๊ธฐ๋ฅ ์ฟผ๋ฆฌ(@supports)๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์ง์์ ๊ฐ์งํ๊ณ ๊ทธ์ ๋ฐ๋ผ ์คํ์ผ์ ์ ์ฉํ ์ ์์ต๋๋ค:
@supports (font-variant-alternates: discretionary-ligatures) {
.my-text {
font-variant-alternates: discretionary-ligatures;
}
}
์ด๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ง์ํ๋ ๊ฒฝ์ฐ์๋ง font-variant-alternates ์์ฑ์ด ์ ์ฉ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋์์ธ ์์คํ ๋ฐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ดํฌ๊ทธ๋ํผ
@font-feature-values๋ ๋์์ธ ์์คํ
์ ์ํํ๊ฒ ํตํฉ๋์ด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ์ผ๊ด๋ ํ์ดํฌ๊ทธ๋ํผ ์คํ์ผ์ ๋ง๋ค ์ ์์ต๋๋ค. ๊ธฐ๋ฅ ๊ฐ์ ์ค์์์ ์ ์ํจ์ผ๋ก์จ ํ์ดํฌ๊ทธ๋ํผ ์ฒ๋ฆฌ๊ฐ ์ ์ฒด ์น์ฌ์ดํธ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ์ผ๊ด๋๊ฒ ์ ์ฉ๋๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ๋ธ๋๋ ์ผ๊ด์ฑ์ ์ฆ์งํ๊ณ ์ ์ง๋ณด์๋ฅผ ๋จ์ํํฉ๋๋ค.
๋ค์์ ๋์์ธ ์์คํ ๋ด์์ CSS๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์์ ๋๋ค:
/* typography.css */
@font-feature-values "MyBrandFont" {
@stylistic-sets {
brand-headline: ss01;
brand-body: ss02;
}
@discretionary-ligatures {
brand-ligatures: on;
}
}
/* components.css */
.headline {
font-family: "MyBrandFont";
font-variant-alternates: stylistic(brand-headline);
}
.body {
font-family: "MyBrandFont";
font-variant-alternates: stylistic(brand-body);
}
.brand-text {
font-family: "MyBrandFont";
font-variant-alternates: discretionary-ligatures(brand-ligatures);
}
์ด ์์ ์์ @font-feature-values๋ ๋ณ๋์ typography.css ํ์ผ์ ์ ์๋๊ณ , ์ปดํฌ๋ํธ ์คํ์ผ์ components.css์ ์ ์๋ฉ๋๋ค. ์ด๋ฌํ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ ๋ชจ๋ํํ๊ณ ์ ์ง๋ณด์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
๊ธฐ๋ฅ ๊ฐ์ ์ค๋ช
์ ์ธ ์ด๋ฆ(์: brand-headline, brand-body)์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ์์ฒด์ ์ผ๋ก ๋ฌธ์ํ๋์ด ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ดํดํ๊ธฐ ์ฌ์์ง๋๋ค. ์ด๋ ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ๋์ผํ ํ๋ก์ ํธ์์ ์์
ํ๋ ๋๊ท๋ชจ ํ์์ ํนํ ์ค์ํฉ๋๋ค.
๊ธ๊ผด ๋ก๋ฉ ๋ฐ ์ฑ๋ฅ
์น ๊ธ๊ผด์ ์ฌ์ฉํ ๋ ์ฑ๋ฅ์ ์ํด ๊ธ๊ผด ๋ก๋ฉ์ ์ต์ ํํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ํฐ ๊ธ๊ผด ํ์ผ์ ํ์ด์ง ๋ก๋ ์๊ฐ์ ํฌ๊ฒ ๋๋ ค ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ด๋ํ ์ ์์ต๋๋ค. ๋ค์์ ๊ธ๊ผด ๋ก๋ฉ์ ์ต์ ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํ์ ๋๋ค:
- WOFF2 ์ฌ์ฉ: WOFF2๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๊ธ๊ผด ํ์์ด๋ฉฐ ์ต๊ณ ์ ์์ถ๋ฅ ์ ์ ๊ณตํฉ๋๋ค. ๊ฐ๋ฅํ๋ฉด ํญ์ ์ฌ์ฉํ์ธ์.
- ๊ธ๊ผด ์๋ธ์ ํ : ๊ธ๊ผด์์ ์ผ๋ถ ๋ฌธ์๋ง ํ์ํ ๊ฒฝ์ฐ, ํ์ผ ํฌ๊ธฐ๋ฅผ ์ค์ด๊ธฐ ์ํด ๊ธ๊ผด์ ์๋ธ์ ํ ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. FontForge์ ๊ฐ์ ๋๊ตฌ๋ ์จ๋ผ์ธ ๊ธ๊ผด ์๋ธ์ ํ ์๋น์ค๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
font-display์ฌ์ฉ:font-display์์ฑ์ ๊ธ๊ผด์ด ๋ก๋๋๋ ๋์ ์ด๋ป๊ฒ ํ์๋ ์ง ์ ์ดํฉ๋๋ค. ํ ์คํธ ๋ ๋๋ง์ ์ฐจ๋จํ์ง ์๋๋กswap์ด๋optional๊ณผ ๊ฐ์ ๊ฐ์ ์ฌ์ฉํ์ธ์.- ๊ธ๊ผด ๋ฏธ๋ฆฌ ๋ก๋:
<link rel="preload">ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ํ ๊ธ๊ผด์ ๋ฏธ๋ฆฌ ๋ก๋ํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง ๋ก๋ฉ ๊ณผ์ ์ด๊ธฐ์ ๋ค์ด๋ก๋ํ๋๋ก ์ง์ํ์ธ์. - ๊ธ๊ผด ์๋น์ค ๊ณ ๋ ค: Google Fonts, Adobe Fonts, Fontdeck๊ณผ ๊ฐ์ ์๋น์ค๊ฐ ๊ธ๊ผด ํธ์คํ ๋ฐ ์ต์ ํ๋ฅผ ๋์ ์ฒ๋ฆฌํด ์ค ์ ์์ต๋๋ค.
@font-feature-values๋ฅผ ์ฌ์ฉํ ๋, OpenType ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ๊ฒ์ ์ฑ๋ฅ ์ํฅ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฏธ๋ฏธํ๋ค๋ ์ ์ ๊ธฐ์ตํ์ธ์. ์ฃผ๋ ์ฑ๋ฅ ๋ฌธ์ ๋ ๊ธ๊ผด ํ์ผ ํฌ๊ธฐ ์์ฒด์
๋๋ค. ๊ธ๊ผด ๋ก๋ฉ ์ต์ ํ์ ์ง์คํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ธฐ ์ํด OpenType ๊ธฐ๋ฅ์ ์ ์คํ๊ฒ ์ฌ์ฉํ์ธ์.
๊ฒฐ๋ก : ํ์ดํฌ๊ทธ๋ํผ์ ํ์ํจ์ ํฅํ์ฌ
@font-feature-values ๊ท์น ๋ฐ ๊ด๋ จ CSS ์์ฑ์ OpenType ๊ธ๊ผด์ ๋ชจ๋ ์ ์ฌ๋ ฅ์ ๋ฐํํ ์ ์๋ ๊ฐ๋ ฅํ ๋๊ตฌ ๋ชจ์์ ์ ๊ณตํฉ๋๋ค. OpenType ๊ธฐ๋ฅ, ์ ๊ทผ์ฑ ๊ณ ๋ ค์ฌํญ, ๊ตญ์ ํ ์๊ตฌ์ฌํญ ๋ฐ ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ์ดํดํจ์ผ๋ก์จ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํค๊ณ ๋ธ๋๋ ์์ด๋ดํฐํฐ๋ฅผ ๊ฐํํ๋ ์ ๊ตํ๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. @font-feature-values์ ํ์ ๋ฐ์๋ค์ฌ ์น ๋์์ธ์ ํ์ดํฌ๊ทธ๋ํผ์ ํ์ํจ์ด๋ผ๋ ์๋ก์ด ์ฐจ์์ผ๋ก ๋์ด์ฌ๋ฆฌ์ธ์.
๋ค์ํ ์ธ์ด์ ๋ฌธํ์ ํ์ดํฌ๊ทธ๋ํผ์ ๋์์ค๋ฅผ ์ ์คํ๊ฒ ๊ณ ๋ คํจ์ผ๋ก์จ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ ์ธ๊ณ ์ฒญ์ค์๊ฒ ์ ๊ทผ ๊ฐ๋ฅํ๊ณ ํฌ์ฉ์ ์ธ ์น์ฌ์ดํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ํต์ฌ์ OpenType ๊ธฐ๋ฅ์ด ๊ฐ๋ ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ ๋ฏธ์น ์ ์๋ ์ ์ฌ์ ์ํฅ์ ์ ์ํ๊ณ , ๋ค์ํ ์ฌ์ฉ์์ ํจ๊ป ํ์ดํฌ๊ทธ๋ํผ๋ฅผ ์ฒ ์ ํ ํ ์คํธํ๋ ๊ฒ์ ๋๋ค.